#pragma once


class SampleBuffer
{
public:
    SampleBuffer(void);
    ~SampleBuffer(void);

protected:
    SampleBuffer(SampleBuffer &);
    SampleBuffer& operator = (SampleBuffer &);

public:
    bool    IsAnyDataSaved();
    void    SaveData(const SampleHeader &header, const BYTE* pData, const UINT maxSize);
    bool    GetData(SampleHeader &header, BYTE* pData, const UINT maxSize);
    bool    PeerData(SampleHeader &header, BYTE* pData, const UINT maxSize) const;
    void    Clean();

protected:
    bool    Alloc(SampleHeader* &pHeaderbuf, BYTE* & pDatabuf, const size);

private:

    BYTE*           m_buffer;
    UINT    m_size;
};


class MediaPinType : protected SampleBuffer
{
public:
    MediaPinType(void);
    ~MediaPinType(void);

    bool    IsInited(){return IsAnyDataSaved();}
    void    SaveMediaTypeData(const SampleHeader &header, const BYTE* pData, const UINT maxSize);
    bool    RestoreMediaTypeData(SampleHeader &header, BYTE* pData, const UINT maxSize) const;

protected:
    MediaPinType(MediaPinType &);
    MediaPinType& operator = (MediaPinType &) const;
};

